/**
 * 处理时间
 * @param {string|number} time 需要处理时间
 * @param {number} type 需要返回的时间类型 1：返回年 2：返回年月 3：返回年月日 4：返回年月日时 5：返回年月日时分 6：返回年月日时分秒
 */
export function handleTime(time, type) {
    if (!time) {
        return '刚刚'
    }
    let timeData = new Date(time)
    let year = timeData.getFullYear() // 获取年
    let month = timeData.getMonth() + 1 // 获取月
    month = month >= 10 ? month : '0' + month
    let day = timeData.getDate() // 获取日
    day = day >= 10 ? day : '0' + day
    let hour = timeData.getHours(); // 时
    hour = hour >= 10 ? hour : '0' + hour
    let minutes = timeData.getMinutes(); // 分
    minutes = minutes >= 10 ? minutes : '0' + minutes
    let seconds = timeData.getSeconds() //秒
    seconds = seconds >= 10 ? seconds : '0' + seconds
    let str = ''
    if (type >= 1) {
        str += year
    }
    if (type >= 2) {
        str += '-' + month
    }
    if (type >= 3) {
        str += '-' + day
    }
    if (type >= 4) {
        str += ' ' + hour
    }
    if (type >= 5) {
        str += ':' + minutes
    }
    if (type >= 6) {
        str += ':' + seconds
    }
    return str
}

/**
 * 隐藏手机号中间4位
 * @param {string|number} phone 需要处理的11位手机号
 */
export function hidePhone(phone) {
    // console.log(phone)
    if (!phone) {
        return false
    }
    let arr
    // 判断转入的手机号是否为字符串，如果不是字符串需转换为字符串
    if (typeof (phone) == 'string') {
        arr = phone.split('')
    } else {
        arr = JSON.stringify(phone).split('')
    }
    arr[3] = '*'
    arr[4] = '*'
    arr[5] = '*'
    arr[6] = '*'
    return arr.join('')
}

/**
 * 计算累计时间，结果单位为分
 * @param {string} startTime 开始时间
 * @param {string} endTime 结束时间，默认为当前时间
 */
export function handleTotalTime(startTime, endTime) {
    let totalTime
    if (!startTime) {
        totalTime = 0
    } else {
        // 将开始时间转换为秒
        let start = parseInt(new Date(startTime).getTime() / 1000);
        let current
        if (endTime) {
            // 如果传入结束时间，将结束时间转换为秒
            current = parseInt(new Date(endTime).getTime() / 1000);
        } else {
            // 判断时区
            let timeZone = -new Date().getTimezoneOffset() / 60
            if (timeZone == 8) {
                // 如果是东八区正常获取秒
                current = parseInt(new Date().getTime() / 1000);
            } else {
                // 如果不是东八区转化为东八区后获取秒
                current = parseInt(new Date().getTime() / 1000 + (8 - timeZone) * 60 * 60)
            }
        }
        // 将累计时间转换为分
        totalTime = Math.ceil((current - start) / 60)
    }
    return totalTime
}

/**
 * 提取富文本中的文字
 * @param {string} richtext 富文本内容
 **/
export function captureWordsFromRichText(richtext) {
    let value = richtext
    value = value.replace(/\s*/g, ""); //去掉空格
    value = value.replace(/<[^>]+>/g, ""); //去掉所有的html标记
    value = value.replace(/↵/g, ""); //去掉所有的↵符号
    value = value.replace(/[\r\n]/g, "") //去掉回车换行
    value = value.replace(/&nbsp;/g, "") //去掉空格
    value = convertIdeogramToNormalCharacter(value);
    return value;
}

function convertIdeogramToNormalCharacter(value) {
    const arrEntities = {
        'lt': '<',
        'gt': '>',
        'nbsp': ' ',
        'amp': '&',
        'quot': '"'
    };
    return value.replace(/&(lt|gt|nbsp|amp|quot);/ig, function (all, t) {
        return arrEntities[t];
    });
}

/**
 * 处理距离 将大于1000m转换为1km并保留两位小数
 */
export function processingDistance(data) {
    let distance
    if (data < 1000) {
        distance = parseInt(data) + 'm'
    } else {
        distance = data / 1000
        distance = distance.toFixed(2)
        let disArr = distance.split('')
        if (disArr[disArr.length - 1] == 0) {
            // 判断最后一位是否为0，如果为0则删除
            disArr = disArr.splice(0, disArr.length - 1)
        }
        distance = disArr.join('') + 'km'
    }
    // console.log(distance.toString())
    return distance
}

/**
 * url路径转obj
 */
export function urlToObj(url) {
    let obj = {}
    let str = url.slice(url.indexOf('?') + 1)
    let arr = str.split('&')
    for (let j = arr.length, i = 0; i < j; i++) {
        let arr_temp = arr[i].split('=')
        obj[arr_temp[0]] = arr_temp[1]
    }
    return obj
}

/**
 * 获取两经纬度之间的距离
 * @param {number} e1 点1的东经, 单位:角度, 如果是西经则为负
 * @param {number} n1 点1的北纬, 单位:角度, 如果是南纬则为负
 * @param {number} e2 点2的东经, 单位:角度, 如果是西经则为负
 * @param {number} n2 点2的北纬, 单位:角度, 如果是南纬则为负
 */
export function getDistance(e1, n1, e2, n2) {
    // let e2 = uni.getStorageSync('longitudeAndLatitude').longitude
    // let n2 = uni.getStorageSync('longitudeAndLatitude').latitude
    const R = 6371
    const { sin, cos, asin, PI, hypot } = Math

    /** 根据经纬度获取点的坐标 */
    let getPoint = (e, n) => {
        e *= PI / 180
        n *= PI / 180
        //这里 R* 被去掉, 相当于先求单位圆上两点的距, 最后会再将这个距离放大 R 倍
        return { x: cos(n) * cos(e), y: cos(n) * sin(e), z: sin(n) }
    }

    let a = getPoint(e1, n1)
    let b = getPoint(e2, n2)
    let c = hypot(a.x - b.x, a.y - b.y, a.z - b.z)
    let r = asin(c / 2) * 2 * R
    let distance = parseInt(Math.round(r * 100) / 100 * 1000)
    if (distance < 1000) {
        distance = distance + 'm'
    } else {
        distance = distance / 1000
        distance = distance.toFixed(2)
        let disArr = distance.split('')
        if (disArr[disArr.length - 1] == 0) {
            disArr = disArr.splice(0, disArr.length - 1)
        }
        distance = disArr.join('') + 'km'
    }
    return distance
}

